﻿//#define _CRT_SECURE_NO_WARNINGS 1
//
//#include "vector.h"
//
////void test_vector1()
////{
////	vector<int> v;
////
////	v.push_back(1);
////	v.push_back(2);
////	v.push_back(3);
////	v.push_back(4);
////	v.push_back(5);
////
////	for (size_t i = 0; i < v.size(); i++)
////	{
////		cout << v[i] << " ";
////	}
////	cout << endl;
////
////	vector<int>::iterator it = v.begin();
////	while (it != v.end())
////	{
////		cout << *it << " ";
////		++it;
////	}
////	cout << endl;
////
////	vector<int>::reverse_iterator rit = v.rbegin();
////	while (rit != v.rend())
////	{
////		cout << *rit << " ";
////		++rit;
////	}
////	cout << endl;
////
////	for (auto e : v)
////	{
////		cout << e << " ";
////	}
////	cout << endl;
////
////}
////int main()
////{
////	test_vector1();
////	return 0;
////}
//
//
//
//
//#include <vector>
//#include <iostream>
//#include <algorithm>
//using namespace std;
//
//vector<int> singleNumber(vector<int>& nums) {
//    if (nums.size() == 2)
//    {
//        return nums;
//    }
//    int ret = 0;
//    for (auto e : nums)
//    {
//        ret ^= e;
//    }
//    vector<int> v;
//    for (int i = 0; i < nums.size(); i++)
//    {
//        for (int j = 0; j < nums.size() ; j++)
//        {
//            if ( (nums[j] ^ nums[i] ) == ret)
//            {
//                v.push_back(nums[j]);
//                v.push_back(nums[i]);
//            }
//        }
//        if (v.size())
//        {
//            break;
//        }
//    }
//    return v;
//}
//int main()
//{
//    vector<int> v = { 7,1,7,2,6,6,3,1 };
//    sort(v.begin(), v.end());
//    for (auto e : v)
//    {
//        cout << e << " ";
//    }
//    cout << endl;
//
//    vector<int> x = singleNumber(v);
//    for (auto e : x)
//    {
//        cout << e << " ";
//    }
//    return 0;
//}

#include <iostream>
#include <vector>
using namespace std;

void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
    int begin1 = 0;
    int begin2 = 0;
    while (begin1 < m && begin2 < n)
    {
        if (nums1[begin1] >= nums2[begin2])
        {
            nums1.insert(nums1.begin() + begin1, nums2[begin2]);
            ++begin1;
            ++begin2;
        }
        else
        {
            ++begin1;
        }

    }
    if (begin2 < n)
    {
        while (begin2 < n)
        {
            nums1.insert(nums1.end(), nums2[begin2++]);
        }
    }
}
int removeElement(vector<int>& nums, int val) {
    vector<int>::iterator it = nums.begin();
    while (it != nums.end())
    {
        if (*it == val)
        {
            it = nums.erase(it);
        }
        else
        {
            ++it;
        }
    }
    return nums.size();
}
int removeElement1(vector<int>& nums, int val) {
    for (int i = 0; i < nums.size(); i++)
    {
        if (nums[i] == val)
        {
            int end = i;
            while (end < nums.size() - 1)
            {
                nums[end] = nums[end + 1];
                ++end;
            }
        }
    }

    return nums.size();
}
int main()
{
   // vector<int> nums1 = {1,2,3};

    vector<int> nums1 = { 2,5,6 ,2};
    //merge(nums1, 3, nums2, 3);
    removeElement1(nums1, 2);
    for (auto e : nums1)
    {
        cout << e << " ";
    }
    return 0;
}